import java.util.Scanner;
import java.util.*;
public class Main {
    /*给你一个大小为 n x m 的二维矩阵 grid ，以及一个长度为 n 的整数数组 limits ，
    和一个整数 k 。你的目标是从矩阵 grid 中提取出 至多 k 个元素，并计算这些元素的最大总和，提取时需满足以下限制：
    从 grid 的第 i 行提取的元素数量不超过 limits[i] 。
    返回最大总和。*/
    public static int check(int n,int m,int[][] nums,int[] limits,int k) {
        List<Integer> arr=new ArrayList<>();
        int result=0;
        for(int i=0;i<n;i++){
            //对每行进行升序
            int[] temp=nums[i];
            Arrays.sort(temp);
            for(int j=m-limits[i];j<m;j++){
                //将符合数量的加入集合
                arr.add(temp[j]);
            }
        }
        //对集合降序
        arr.sort(Comparator.reverseOrder());
        for(int i=0;i<k;i++){
            result+=arr.get(i);
        }
        return result;
    }
    public static void main(String[] args) {
      Scanner sc=new Scanner(System.in);
      int n=sc.nextInt();
      int m=sc.nextInt();
      int[][] nums=new int[n][m];
      for(int i=0;i<n;i++){
          for(int j=0;j<m;j++){
              nums[i][j]=sc.nextInt();
          }
      }
      int[] limits=new int[n];
      for(int i=0;i<n;i++){
          limits[i]=sc.nextInt();
      }
      int k=sc.nextInt();
      int sum=check(n,m,nums,limits,k);
      System.out.println(sum);
    }
}